package com.study.animationstudy.ui

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.view.animation.AlphaAnimation
import android.view.animation.Animation
import android.view.animation.Animation.AnimationListener
import android.view.animation.RotateAnimation
import android.view.animation.ScaleAnimation
import android.view.animation.TranslateAnimation
import android.widget.AdapterView
import android.widget.AdapterView.OnItemSelectedListener
import android.widget.ArrayAdapter
import com.study.animationstudy.R
import com.study.animationstudy.base.BaseActivity
import com.study.animationstudy.databinding.ActivityTweenAnimBinding
import com.study.animationstudy.util.Utils

class TweenAnimActivity : BaseActivity<ActivityTweenAnimBinding>(),AnimationListener {

    // 声明四个补间动画对象
    //灰度动画
    lateinit var alphaAnim:Animation
    //平移动画
    lateinit var translateAnim:Animation
    //缩放动画
    lateinit var scaleAnim:Animation
    //旋转动画
    lateinit var rotateAnim:Animation
    var isEnd = false

    override fun ActivityTweenAnimBinding.initBinding() {
        //初始化补间动画
        initTweenAnim()
        //初始化spinner
        initTweenSpinner()
    }

    /**
     * 初始化补间动画
     */
    fun initTweenAnim(){
        // 创建一个灰度动画。从完全透明变为即将不透明
        alphaAnim = AlphaAnimation(1f,0.1f)
        // 设置动画的播放时长
        alphaAnim.duration = 3000
        // 设置维持结束画面
        alphaAnim.fillAfter = true

        // 创建一个平移动画。向左平移100dp
        translateAnim = TranslateAnimation(1f, Utils.dip2px(this,-100f).toFloat(),1f,1f)
        // 设置动画的播放时长
        translateAnim.duration = 3000
        // 设置维持结束画面
        translateAnim.fillAfter = true

        // 创建一个缩放动画。宽度不变，高度变为原来的二分之一
        scaleAnim = ScaleAnimation(1f,1f,1f,0.5f)
        // 设置动画的播放时长
        scaleAnim.duration = 3000
        // 设置维持结束画面
        scaleAnim.fillAfter = true

        // 创建一个旋转动画。围绕着圆心顺时针旋转360度
        rotateAnim = RotateAnimation(0f,360f,Animation.RELATIVE_TO_SELF,
            0.5f,Animation.RELATIVE_TO_SELF,0.5f)
        // 设置动画的播放时长
        rotateAnim.duration = 3000
        // 设置维持结束画面
        rotateAnim.fillAfter = true
    }

    val tweenArr = arrayOf("灰度动画", "平移动画", "缩放动画", "旋转动画")
    /**
     * 初始化动画类型下拉框
     */
    fun initTweenSpinner(){
        val tweenArrayAdapter = ArrayAdapter<String>(this,R.layout.item_select,tweenArr)
        mBinding.spTween.apply {
            prompt = "请选择补间动画类型"
            adapter = tweenArrayAdapter
            onItemSelectedListener = object :OnItemSelectedListener{
                override fun onItemSelected(
                    parent: AdapterView<*>?,
                    view: View?,
                    position: Int,
                    id: Long
                ) {
                    // 播放指定类型的补间动画
                    playTweenAnim(position)
                }

                override fun onNothingSelected(parent: AdapterView<*>?) {

                }

            }
            setSelection(0)
        }
    }

    /**
     * 播放指定类型的补间动画
     */
    fun playTweenAnim(type:Int){
        when(type){
            // 灰度动画
            0 -> {
                // 开始播放灰度动画
                mBinding.ivTweenAnim.startAnimation(alphaAnim)
                // 给灰度动画设置动画事件监听器
                alphaAnim.setAnimationListener(this)
            }
            // 平移动画
            1 -> {
                mBinding.ivTweenAnim.startAnimation(translateAnim)
                translateAnim.setAnimationListener(this)
            }
            // 缩放动画
            2 -> {
                mBinding.ivTweenAnim.startAnimation(scaleAnim)
                scaleAnim.setAnimationListener(this)
            }
            // 旋转动画
            3 -> {
                mBinding.ivTweenAnim.startAnimation(rotateAnim)
                rotateAnim.setAnimationListener(this)
            }
        }
    }

    override fun onAnimationStart(animation: Animation?) {

    }

    override fun onAnimationEnd(animation: Animation?) {
        animation?.let {
            when(it){
                //灰度动画
                is AlphaAnimation -> {
                    // 创建一个灰度动画。从完全透明变为即将不透明
                    val alphaAnim2 = AlphaAnimation(0.1f,1f)
                    // 设置动画的播放时长
                    alphaAnim2.duration = 1000
                    // 设置维持结束画面
                    alphaAnim2.fillAfter = true
                    //开始播放灰度动画
                    mBinding.ivTweenAnim.startAnimation(alphaAnim2)
                    alphaAnim2.setAnimationListener(object :AnimationListener{
                        override fun onAnimationStart(animation: Animation?) {

                        }

                        override fun onAnimationEnd(animation: Animation?) {
                            playTweenAnim(0)
                        }

                        override fun onAnimationRepeat(animation: Animation?) {

                        }
                    })
                }
                //平移动画
                is TranslateAnimation -> {
                    // 创建一个平移动画。向左平移100dp
                    val translateAnim = TranslateAnimation(Utils.dip2px(this,-100f).toFloat(),1f,1f,1f)
                    // 设置动画的播放时长
                    translateAnim.duration = 3000
                    // 设置维持结束画面
                    translateAnim.fillAfter = true
                    //开始播放灰度动画
                    mBinding.ivTweenAnim.startAnimation(translateAnim)
                }
                //缩放动画
                is ScaleAnimation -> {
                    // 创建一个缩放动画。宽度不变，高度变为原来的二倍
                    val scaleAnim = ScaleAnimation(1f,1f,0.5f,1f)
                    // 设置动画的播放时长
                    scaleAnim.duration = 3000
                    // 设置维持结束画面
                    scaleAnim.fillAfter = true
                    //开始播放灰度动画
                    mBinding.ivTweenAnim.startAnimation(scaleAnim)
                }
                //旋转动画
                is RotateAnimation -> {
                    // 创建一个旋转动画。围绕着圆心逆时针旋转360度
                    val rotateAnim = RotateAnimation(0f,-360f,Animation.RELATIVE_TO_SELF,
                        0.5f,Animation.RELATIVE_TO_SELF,0.5f)
                    // 设置动画的播放时长
                    rotateAnim.duration = 3000
                    // 设置维持结束画面
                    rotateAnim.fillAfter = true
                    //开始播放灰度动画
                    mBinding.ivTweenAnim.startAnimation(rotateAnim)
                }
            }
        }

    }

    override fun onAnimationRepeat(animation: Animation?) {

    }

}